Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
389 / 389
PptTheme
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
8
100.00% covered (success)
100.00%
389 / 389
 render
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
3 / 3
 writeTheme
100.00% covered (success)
100.00%
1 / 1
6
100.00% covered (success)
100.00%
386 / 386
1<?php
2/**
3 * This file is part of PHPPresentation - A pure PHP library for reading and writing
4 * presentations documents.
5 *
6 * PHPPresentation is free software distributed under the terms of the GNU Lesser
7 * General Public License version 3 as published by the Free Software Foundation.
8 *
9 * For the full copyright and license information, please read the LICENSE
10 * file that was distributed with this source code. For the full list of
11 * contributors, visit https://github.com/PHPOffice/PHPPresentation/contributors.
12 *
13 * @see        https://github.com/PHPOffice/PHPPresentation
14 *
15 * @copyright   2009-2015 PHPPresentation contributors
16 * @license     http://www.gnu.org/licenses/lgpl.txt LGPL version 3
17 */
18
19declare(strict_types=1);
20
21namespace PhpOffice\PhpPresentation\Writer\PowerPoint2007;
22
23use PhpOffice\Common\Adapter\Zip\ZipInterface;
24use PhpOffice\Common\XMLWriter;
25use PhpOffice\PhpPresentation\Slide;
26
27class PptTheme extends AbstractDecoratorWriter
28{
29    /**
30     * @return ZipInterface
31     */
32    public function render(): ZipInterface
33    {
34        foreach ($this->oPresentation->getAllMasterSlides() as $oMasterSlide) {
35            $this->getZip()->addFromString('ppt/theme/theme' . $oMasterSlide->getRelsIndex() . '.xml', $this->writeTheme($oMasterSlide));
36        }
37
38        return $this->getZip();
39    }
40
41    /**
42     * Write theme to XML format.
43     *
44     * @return string XML Output
45     */
46    protected function writeTheme(Slide\SlideMaster $oMasterSlide): string
47    {
48        $arrayFont = [
49            'Jpan' => 'MS Pゴシック',
50            'Hang' => '맑은 고딕',
51            'Hans' => '宋体',
52            'Hant' => '新細明體',
53            'Arab' => 'Times New Roman',
54            'Hebr' => 'Times New Roman',
55            'Thai' => 'Angsana New',
56            'Ethi' => 'Nyala',
57            'Beng' => 'Vrinda',
58            'Gujr' => 'Shruti',
59            'Khmr' => 'MoolBoran',
60            'Knda' => 'Tunga',
61            'Guru' => 'Raavi',
62            'Cans' => 'Euphemia',
63            'Cher' => 'Plantagenet Cherokee',
64            'Yiii' => 'Microsoft Yi Baiti',
65            'Tibt' => 'Microsoft Himalaya',
66            'Thaa' => 'MV Boli',
67            'Deva' => 'Mangal',
68            'Telu' => 'Gautami',
69            'Taml' => 'Latha',
70            'Syrc' => 'Estrangelo Edessa',
71            'Orya' => 'Kalinga',
72            'Mlym' => 'Kartika',
73            'Laoo' => 'DokChampa',
74            'Sinh' => 'Iskoola Pota',
75            'Mong' => 'Mongolian Baiti',
76            'Viet' => 'Times New Roman',
77            'Uigh' => 'Microsoft Uighur',
78        ];
79
80        // Create XML writer
81        $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
82
83        $name = 'Theme' . rand(1, 100);
84
85        // XML header
86        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
87
88        // a:theme
89        $objWriter->startElement('a:theme');
90        $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
91        $objWriter->writeAttribute('name', $name);
92
93        // a:theme/a:themeElements
94        $objWriter->startElement('a:themeElements');
95
96        // a:theme/a:themeElements/a:clrScheme
97        $objWriter->startElement('a:clrScheme');
98        $objWriter->writeAttribute('name', $name);
99
100        foreach ($oMasterSlide->getAllSchemeColors() as $oSchemeColor) {
101            // a:theme/a:themeElements/a:clrScheme/a:*
102            $objWriter->startElement('a:' . $oSchemeColor->getValue());
103
104            if (in_array($oSchemeColor->getValue(), [
105                'dk1', 'lt1',
106            ])) {
107                $objWriter->startElement('a:sysClr');
108                $objWriter->writeAttribute('val', ('dk1' == $oSchemeColor->getValue() ? 'windowText' : 'window'));
109                $objWriter->writeAttribute('lastClr', $oSchemeColor->getRGB());
110                $objWriter->endElement();
111            } else {
112                $objWriter->startElement('a:srgbClr');
113                $objWriter->writeAttribute('val', $oSchemeColor->getRGB());
114                $objWriter->endElement();
115            }
116
117            // a:theme/a:themeElements/a:clrScheme/a:*/
118            $objWriter->endElement();
119        }
120
121        // a:theme/a:themeElements/a:clrScheme/
122        $objWriter->endElement();
123
124        // a:theme/a:themeElements/a:fontScheme
125        $objWriter->startElement('a:fontScheme');
126        $objWriter->writeAttribute('name', $name);
127
128        // a:theme/a:themeElements/a:fontScheme/a:majorFont
129        $objWriter->startElement('a:majorFont');
130
131        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin
132        $objWriter->startElement('a:latin');
133        $objWriter->writeAttribute('typeface', 'Calibri');
134        $objWriter->endElement();
135
136        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:ea
137        $objWriter->startElement('a:ea');
138        $objWriter->writeAttribute('typeface', '');
139        $objWriter->endElement();
140
141        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:cs
142        $objWriter->startElement('a:cs');
143        $objWriter->writeAttribute('typeface', '');
144        $objWriter->endElement();
145
146        foreach ($arrayFont as $script => $typeface) {
147            // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:font
148            $objWriter->startElement('a:font');
149            $objWriter->writeAttribute('script', $script);
150            $objWriter->writeAttribute('typeface', $typeface);
151            $objWriter->endElement();
152        }
153
154        // a:theme/a:themeElements/a:fontScheme/a:majorFont/
155        $objWriter->endElement();
156
157        // a:theme/a:themeElements/a:fontScheme/a:minorFont
158        $objWriter->startElement('a:minorFont');
159
160        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin
161        $objWriter->startElement('a:latin');
162        $objWriter->writeAttribute('typeface', 'Calibri');
163        $objWriter->endElement();
164
165        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:ea
166        $objWriter->startElement('a:ea');
167        $objWriter->writeAttribute('typeface', '');
168        $objWriter->endElement();
169
170        // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:cs
171        $objWriter->startElement('a:cs');
172        $objWriter->writeAttribute('typeface', '');
173        $objWriter->endElement();
174
175        foreach ($arrayFont as $script => $typeface) {
176            // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:font
177            $objWriter->startElement('a:font');
178            $objWriter->writeAttribute('script', $script);
179            $objWriter->writeAttribute('typeface', $typeface);
180            $objWriter->endElement();
181        }
182
183        // a:theme/a:themeElements/a:fontScheme/a:minorFont/
184        $objWriter->endElement();
185
186        // a:theme/a:themeElements/a:fontScheme/
187        $objWriter->endElement();
188
189        // a:theme/a:themeElements/a:fmtScheme
190        $objWriter->startElement('a:fmtScheme');
191        $objWriter->writeAttribute('name', $name);
192
193        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst
194        $objWriter->startElement('a:fillStyleLst');
195
196        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill
197        $objWriter->startElement('a:solidFill');
198
199        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/a:schemeClr
200        $objWriter->startElement('a:schemeClr');
201        $objWriter->writeAttribute('val', 'phClr');
202
203        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/a:schemeClr/
204        $objWriter->endElement();
205
206        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/
207        $objWriter->endElement();
208
209        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill
210        $objWriter->startElement('a:gradFill');
211        $objWriter->writeAttribute('rotWithShape', 1);
212
213        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst
214        $objWriter->startElement('a:gsLst');
215
216        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
217        $objWriter->startElement('a:gs');
218        $objWriter->writeAttribute('pos', '0');
219
220        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
221        $objWriter->startElement('a:schemeClr');
222        $objWriter->writeAttribute('val', 'phClr');
223
224        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
225        $objWriter->startElement('a:tint');
226        $objWriter->writeAttribute('val', '50000');
227        $objWriter->endElement();
228
229        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
230        $objWriter->startElement('a:satMod');
231        $objWriter->writeAttribute('val', '300000');
232        $objWriter->endElement();
233
234        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
235        $objWriter->endElement();
236
237        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
238        $objWriter->endElement();
239
240        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
241        $objWriter->startElement('a:gs');
242        $objWriter->writeAttribute('pos', '35000');
243
244        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
245        $objWriter->startElement('a:schemeClr');
246        $objWriter->writeAttribute('val', 'phClr');
247
248        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
249        $objWriter->startElement('a:tint');
250        $objWriter->writeAttribute('val', '37000');
251        $objWriter->endElement();
252
253        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
254        $objWriter->startElement('a:satMod');
255        $objWriter->writeAttribute('val', '300000');
256        $objWriter->endElement();
257
258        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
259        $objWriter->endElement();
260
261        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
262        $objWriter->endElement();
263
264        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
265        $objWriter->startElement('a:gs');
266        $objWriter->writeAttribute('pos', '100000');
267
268        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
269        $objWriter->startElement('a:schemeClr');
270        $objWriter->writeAttribute('val', 'phClr');
271
272        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
273        $objWriter->startElement('a:tint');
274        $objWriter->writeAttribute('val', '15000');
275        $objWriter->endElement();
276
277        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
278        $objWriter->startElement('a:satMod');
279        $objWriter->writeAttribute('val', '350000');
280        $objWriter->endElement();
281
282        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
283        $objWriter->endElement();
284
285        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
286        $objWriter->endElement();
287
288        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/
289        $objWriter->endElement();
290
291        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:lin
292        $objWriter->startElement('a:lin');
293        $objWriter->writeAttribute('ang', 16200000);
294        $objWriter->writeAttribute('scaled', 1);
295        $objWriter->endElement();
296
297        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/
298        $objWriter->endElement();
299
300        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill
301        $objWriter->startElement('a:gradFill');
302        $objWriter->writeAttribute('rotWithShape', 1);
303
304        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst
305        $objWriter->startElement('a:gsLst');
306
307        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
308        $objWriter->startElement('a:gs');
309        $objWriter->writeAttribute('pos', '0');
310
311        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
312        $objWriter->startElement('a:schemeClr');
313        $objWriter->writeAttribute('val', 'phClr');
314
315        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
316        $objWriter->startElement('a:shade');
317        $objWriter->writeAttribute('val', '51000');
318        $objWriter->endElement();
319
320        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
321        $objWriter->startElement('a:satMod');
322        $objWriter->writeAttribute('val', '130000');
323        $objWriter->endElement();
324
325        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
326        $objWriter->endElement();
327
328        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
329        $objWriter->endElement();
330
331        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
332        $objWriter->startElement('a:gs');
333        $objWriter->writeAttribute('pos', '80000');
334
335        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
336        $objWriter->startElement('a:schemeClr');
337        $objWriter->writeAttribute('val', 'phClr');
338
339        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
340        $objWriter->startElement('a:shade');
341        $objWriter->writeAttribute('val', '93000');
342        $objWriter->endElement();
343
344        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
345        $objWriter->startElement('a:satMod');
346        $objWriter->writeAttribute('val', '130000');
347        $objWriter->endElement();
348
349        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
350        $objWriter->endElement();
351
352        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
353        $objWriter->endElement();
354
355        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs
356        $objWriter->startElement('a:gs');
357        $objWriter->writeAttribute('pos', '100000');
358
359        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
360        $objWriter->startElement('a:schemeClr');
361        $objWriter->writeAttribute('val', 'phClr');
362
363        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
364        $objWriter->startElement('a:shade');
365        $objWriter->writeAttribute('val', '94000');
366        $objWriter->endElement();
367
368        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
369        $objWriter->startElement('a:satMod');
370        $objWriter->writeAttribute('val', '135000');
371        $objWriter->endElement();
372
373        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
374        $objWriter->endElement();
375
376        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/
377        $objWriter->endElement();
378
379        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/
380        $objWriter->endElement();
381
382        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:lin
383        $objWriter->startElement('a:lin');
384        $objWriter->writeAttribute('ang', 16200000);
385        $objWriter->writeAttribute('scaled', 0);
386        $objWriter->endElement();
387
388        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/
389        $objWriter->endElement();
390
391        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/
392        $objWriter->endElement();
393
394        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst
395        $objWriter->startElement('a:lnStyleLst');
396
397        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
398        $objWriter->startElement('a:ln');
399        $objWriter->writeAttribute('w', 9525);
400        $objWriter->writeAttribute('cap', 'flat');
401        $objWriter->writeAttribute('cmpd', 'sng');
402        $objWriter->writeAttribute('algn', 'ctr');
403
404        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
405        $objWriter->startElement('a:solidFill');
406
407        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
408        $objWriter->startElement('a:schemeClr');
409        $objWriter->writeAttribute('val', 'phClr');
410
411        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
412        $objWriter->startElement('a:shade');
413        $objWriter->writeAttribute('val', '95000');
414        $objWriter->endElement();
415
416        // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
417        $objWriter->startElement('a:satMod');
418        $objWriter->writeAttribute('val', '105000');
419        $objWriter->endElement();
420
421        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
422        $objWriter->endElement();
423
424        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
425        $objWriter->endElement();
426
427        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
428        $objWriter->startElement('a:prstDash');
429        $objWriter->writeAttribute('val', 'solid');
430        $objWriter->endElement();
431
432        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
433        $objWriter->endElement();
434
435        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
436        $objWriter->startElement('a:ln');
437        $objWriter->writeAttribute('w', 25400);
438        $objWriter->writeAttribute('cap', 'flat');
439        $objWriter->writeAttribute('cmpd', 'sng');
440        $objWriter->writeAttribute('algn', 'ctr');
441
442        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
443        $objWriter->startElement('a:solidFill');
444
445        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
446        $objWriter->startElement('a:schemeClr');
447        $objWriter->writeAttribute('val', 'phClr');
448
449        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
450        $objWriter->endElement();
451
452        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
453        $objWriter->endElement();
454
455        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
456        $objWriter->startElement('a:prstDash');
457        $objWriter->writeAttribute('val', 'solid');
458        $objWriter->endElement();
459
460        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
461        $objWriter->endElement();
462
463        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln
464        $objWriter->startElement('a:ln');
465        $objWriter->writeAttribute('w', 38100);
466        $objWriter->writeAttribute('cap', 'flat');
467        $objWriter->writeAttribute('cmpd', 'sng');
468        $objWriter->writeAttribute('algn', 'ctr');
469
470        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill
471        $objWriter->startElement('a:solidFill');
472
473        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr
474        $objWriter->startElement('a:schemeClr');
475        $objWriter->writeAttribute('val', 'phClr');
476
477        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/
478        $objWriter->endElement();
479
480        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/
481        $objWriter->endElement();
482
483        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash
484        $objWriter->startElement('a:prstDash');
485        $objWriter->writeAttribute('val', 'solid');
486        $objWriter->endElement();
487
488        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/
489        $objWriter->endElement();
490
491        // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/
492        $objWriter->endElement();
493
494        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst
495        $objWriter->startElement('a:effectStyleLst');
496
497        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
498        $objWriter->startElement('a:effectStyle');
499
500        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
501        $objWriter->startElement('a:effectLst');
502
503        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
504        $objWriter->startElement('a:outerShdw');
505        $objWriter->writeAttribute('blurRad', 40000);
506        $objWriter->writeAttribute('dir', 5400000);
507        $objWriter->writeAttribute('dist', 20000);
508        $objWriter->writeAttribute('rotWithShape', 0);
509
510        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
511        $objWriter->startElement('a:srgbClr');
512        $objWriter->writeAttribute('val', '000000');
513
514        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
515        $objWriter->startElement('a:alpha');
516        $objWriter->writeAttribute('val', '38000');
517
518        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
519        $objWriter->endElement();
520
521        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
522        $objWriter->endElement();
523
524        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
525        $objWriter->endElement();
526
527        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
528        $objWriter->endElement();
529
530        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
531        $objWriter->endElement();
532
533        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
534        $objWriter->startElement('a:effectStyle');
535
536        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
537        $objWriter->startElement('a:effectLst');
538
539        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
540        $objWriter->startElement('a:outerShdw');
541        $objWriter->writeAttribute('blurRad', 40000);
542        $objWriter->writeAttribute('dir', 5400000);
543        $objWriter->writeAttribute('dist', 23000);
544        $objWriter->writeAttribute('rotWithShape', 0);
545
546        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
547        $objWriter->startElement('a:srgbClr');
548        $objWriter->writeAttribute('val', '000000');
549
550        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
551        $objWriter->startElement('a:alpha');
552        $objWriter->writeAttribute('val', '35');
553
554        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
555        $objWriter->endElement();
556
557        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
558        $objWriter->endElement();
559
560        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
561        $objWriter->endElement();
562
563        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
564        $objWriter->endElement();
565
566        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
567        $objWriter->endElement();
568
569        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle
570        $objWriter->startElement('a:effectStyle');
571
572        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst
573        $objWriter->startElement('a:effectLst');
574
575        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw
576        $objWriter->startElement('a:outerShdw');
577        $objWriter->writeAttribute('blurRad', 40000);
578        $objWriter->writeAttribute('dir', 5400000);
579        $objWriter->writeAttribute('dist', 23000);
580        $objWriter->writeAttribute('rotWithShape', 0);
581
582        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr
583        $objWriter->startElement('a:srgbClr');
584        $objWriter->writeAttribute('val', '000000');
585
586        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha
587        $objWriter->startElement('a:alpha');
588        $objWriter->writeAttribute('val', '35000');
589
590        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/
591        $objWriter->endElement();
592
593        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/
594        $objWriter->endElement();
595
596        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/
597        $objWriter->endElement();
598
599        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/
600        $objWriter->endElement();
601
602        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d
603        $objWriter->startElement('a:scene3d');
604
605        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera
606        $objWriter->startElement('a:camera');
607        $objWriter->writeAttribute('prst', 'orthographicFront');
608
609        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera/a:rot
610        $objWriter->startElement('a:rot');
611        $objWriter->writeAttribute('lat', 0);
612        $objWriter->writeAttribute('lon', 0);
613        $objWriter->writeAttribute('rev', 0);
614        $objWriter->endElement();
615
616        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera/
617        $objWriter->endElement();
618
619        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig
620        $objWriter->startElement('a:lightRig');
621        $objWriter->writeAttribute('dir', 't');
622        $objWriter->writeAttribute('rig', 'threePt');
623
624        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig/a:rot
625        $objWriter->startElement('a:rot');
626        $objWriter->writeAttribute('lat', 0);
627        $objWriter->writeAttribute('lon', 0);
628        $objWriter->writeAttribute('rev', 1200000);
629        $objWriter->endElement();
630
631        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig/
632        $objWriter->endElement();
633
634        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/
635        $objWriter->endElement();
636
637        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d
638        $objWriter->startElement('a:sp3d');
639
640        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d/a:bevelT
641        $objWriter->startElement('a:bevelT');
642        $objWriter->writeAttribute('h', 25400);
643        $objWriter->writeAttribute('w', 63500);
644        $objWriter->endElement();
645
646        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d/
647        $objWriter->endElement();
648
649        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/
650        $objWriter->endElement();
651
652        // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/
653        $objWriter->endElement();
654
655        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst
656        $objWriter->startElement('a:bgFillStyleLst');
657
658        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill
659        $objWriter->startElement('a:solidFill');
660
661        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/a:schemeClr
662        $objWriter->startElement('a:schemeClr');
663        $objWriter->writeAttribute('val', 'phClr');
664
665        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/a:schemeClr/
666        $objWriter->endElement();
667
668        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/
669        $objWriter->endElement();
670
671        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill
672        $objWriter->startElement('a:gradFill');
673        $objWriter->writeAttribute('rotWithShape', 1);
674
675        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst
676        $objWriter->startElement('a:gsLst');
677
678        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
679        $objWriter->startElement('a:gs');
680        $objWriter->writeAttribute('pos', '0');
681
682        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
683        $objWriter->startElement('a:schemeClr');
684        $objWriter->writeAttribute('val', 'phClr');
685
686        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
687        $objWriter->startElement('a:tint');
688        $objWriter->writeAttribute('val', '40000');
689        $objWriter->endElement();
690
691        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
692        $objWriter->startElement('a:satMod');
693        $objWriter->writeAttribute('val', '350000');
694        $objWriter->endElement();
695
696        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
697        $objWriter->endElement();
698
699        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
700        $objWriter->endElement();
701
702        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
703        $objWriter->startElement('a:gs');
704        $objWriter->writeAttribute('pos', '40000');
705
706        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
707        $objWriter->startElement('a:schemeClr');
708        $objWriter->writeAttribute('val', 'phClr');
709
710        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
711        $objWriter->startElement('a:tint');
712        $objWriter->writeAttribute('val', '45000');
713        $objWriter->endElement();
714
715        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
716        $objWriter->startElement('a:shade');
717        $objWriter->writeAttribute('val', '99000');
718        $objWriter->endElement();
719
720        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
721        $objWriter->startElement('a:satMod');
722        $objWriter->writeAttribute('val', '350000');
723        $objWriter->endElement();
724
725        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
726        $objWriter->endElement();
727
728        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
729        $objWriter->endElement();
730
731        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
732        $objWriter->startElement('a:gs');
733        $objWriter->writeAttribute('pos', '100000');
734
735        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
736        $objWriter->startElement('a:schemeClr');
737        $objWriter->writeAttribute('val', 'phClr');
738
739        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
740        $objWriter->startElement('a:shade');
741        $objWriter->writeAttribute('val', '20000');
742        $objWriter->endElement();
743
744        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
745        $objWriter->startElement('a:satMod');
746        $objWriter->writeAttribute('val', '255000');
747        $objWriter->endElement();
748
749        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
750        $objWriter->endElement();
751
752        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
753        $objWriter->endElement();
754
755        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/
756        $objWriter->endElement();
757
758        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path
759        $objWriter->startElement('a:path');
760        $objWriter->writeAttribute('path', 'circle');
761
762        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/a:fillToRect
763        $objWriter->startElement('a:fillToRect');
764        $objWriter->writeAttribute('b', '180000');
765        $objWriter->writeAttribute('l', '50000');
766        $objWriter->writeAttribute('r', '50000');
767        $objWriter->writeAttribute('t', '-80000');
768        $objWriter->endElement();
769
770        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/
771        $objWriter->endElement();
772
773        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/
774        $objWriter->endElement();
775
776        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill
777        $objWriter->startElement('a:gradFill');
778        $objWriter->writeAttribute('rotWithShape', 1);
779
780        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst
781        $objWriter->startElement('a:gsLst');
782
783        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
784        $objWriter->startElement('a:gs');
785        $objWriter->writeAttribute('pos', '0');
786
787        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
788        $objWriter->startElement('a:schemeClr');
789        $objWriter->writeAttribute('val', 'phClr');
790
791        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint
792        $objWriter->startElement('a:tint');
793        $objWriter->writeAttribute('val', '80000');
794        $objWriter->endElement();
795
796        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
797        $objWriter->startElement('a:satMod');
798        $objWriter->writeAttribute('val', '300000');
799        $objWriter->endElement();
800
801        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
802        $objWriter->endElement();
803
804        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
805        $objWriter->endElement();
806
807        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs
808        $objWriter->startElement('a:gs');
809        $objWriter->writeAttribute('pos', '100000');
810
811        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr
812        $objWriter->startElement('a:schemeClr');
813        $objWriter->writeAttribute('val', 'phClr');
814
815        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade
816        $objWriter->startElement('a:shade');
817        $objWriter->writeAttribute('val', '30000');
818        $objWriter->endElement();
819
820        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod
821        $objWriter->startElement('a:satMod');
822        $objWriter->writeAttribute('val', '200000');
823        $objWriter->endElement();
824
825        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/
826        $objWriter->endElement();
827
828        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/
829        $objWriter->endElement();
830
831        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/
832        $objWriter->endElement();
833
834        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path
835        $objWriter->startElement('a:path');
836        $objWriter->writeAttribute('path', 'circle');
837
838        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/a:fillToRect
839        $objWriter->startElement('a:fillToRect');
840        $objWriter->writeAttribute('b', '50000');
841        $objWriter->writeAttribute('l', '50000');
842        $objWriter->writeAttribute('r', '50000');
843        $objWriter->writeAttribute('t', '50000');
844        $objWriter->endElement();
845
846        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/
847        $objWriter->endElement();
848
849        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/
850        $objWriter->endElement();
851
852        // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/
853        $objWriter->endElement();
854
855        // a:theme/a:themeElements/a:fmtScheme/
856        $objWriter->endElement();
857
858        // a:theme/a:themeElements/
859        $objWriter->endElement();
860
861        // a:theme/a:themeElements
862        $objWriter->writeElement('a:objectDefaults');
863
864        // a:theme/a:extraClrSchemeLst
865        $objWriter->writeElement('a:extraClrSchemeLst');
866
867        // a:theme/
868        $objWriter->endElement();
869
870        // Return
871        return $objWriter->getData();
872    }
873}